/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package admin;

import bazy.HibernateUtil;
import bazy.Uzytkownicy;
import java.io.Serializable;
import java.util.List;
import javax.inject.Named;
import javax.enterprise.context.RequestScoped;
import javax.faces.application.ConfigurableNavigationHandler;
import javax.faces.context.FacesContext;
import logowanie.LogBean;
import org.hibernate.Session;

/**
 * Komponent zarządzajacy do obsługi okna związanego z przeglądaniem użytkowników.
 * @author Grzesiek
 */
@Named(value = "adminKontroler")
@RequestScoped
public class AdminKontroler implements Serializable {


    private List listaUzytkownikow;
    private Session session;
    private String komunikat = "";
    private boolean error = false;
    private int idUser;
    private String akcja;

    public List getListaUzytkownikow() {
        return listaUzytkownikow;
    }

    public String getKomunikat() {
        return komunikat;
    }

    public String getAkcja() {
        return akcja;
    }

    public void setAkcja(String akcja) {
        this.akcja = akcja;
    }

    public int getIdUser() {
        return idUser;
    }

    public void setIdUser(int idUser) {
        this.idUser = idUser;
    }

    /** Creates a new instance of AdminKontroler */
    public AdminKontroler() {
    }

    /**
     * Zabranie użytkownikowi praw umożliwiających zalogowanie się do systemu.
     * Odbywa się to poprzez ustawienie flagi - aktywny na 0, oraz na dodaniu do nazwy loginu tekstu NIEKATYWNY
     * @param id id użytkownika, którego konto chcemy zablokować.
     */
    public void usun(int id) {

        session = HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        Uzytkownicy uz = (Uzytkownicy) session.load(Uzytkownicy.class, id);
        if (!uz.getUprawnienia().getNazwaUprawnienia().equals("admin")) {
            uz.setAktywny(false);
            uz.setLogin(uz.getLogin() + "NIEAKTYWNY");
            session.update(uz);
            komunikat = "Poprawnie usunięto użytkownika.";
        } else {
            komunikat = "Nie możesz usunąc użytkownika o prawach administratora.";
            error = true;
        }
        session.getTransaction().commit();
        session.close();


    }

    /**
     * Inicjalizacja strony, sprawdzenie uprawnień, oraz w przypadku wystąpienia parametrów widoku, odpowiednia ich obsługa.
     */
    public void inicjalizuj() {
        FacesContext context = FacesContext.getCurrentInstance();
        LogBean bean = (LogBean) context.getApplication().evaluateExpressionGet(context, "#{logBean}", LogBean.class);
        if (!bean.isLoggedin() || !bean.getUprawnienia().equals("admin")) {
            ConfigurableNavigationHandler handler = (ConfigurableNavigationHandler) context.getApplication().getNavigationHandler();
            handler.performNavigation("brak_dostepu");
        }
        if (akcja != null) {
            if (akcja.equals("delete")) {
                usun(idUser);

            }
        }
        this.session = HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        listaUzytkownikow = session.createQuery("from Uzytkownicy u where u.aktywny=1 order by u.login asc").list();
        session.getTransaction().commit();

    }
/**
 * Rozróżnienie czy jest to komunikat błędu czy informacyjny.
 * @return nazwa klasy CSS.
 */
    public String rodzajKomunikatu() {
        if (error) {
            return "error";
        }
        error = false;
        return "true";
    }

    /**
     * Zamknięcie sesji do bazy.
     */
    public void zakoncz() {
        session.close();
    }
}
